// /*
//  * modbus_rtu.h - Modbus RTU 从设备驱动头文件
//  * 适用于MSPM0G3507微控制器
//  * 专为4G模块与下位机通信设计
//  */

// #ifndef MODBUS_RTU_H_
// #define MODBUS_RTU_H_

// #include "ti_msp_dl_config.h"
// #include "Driver/software/UART-4G/UART-4G.h"
// #include <stdint.h>
// #include <stdbool.h>

// // Modbus RTU 配置定义
// #define MODBUS_SLAVE_ADDRESS        0x01        // 从设备地址
// #define MODBUS_BUFFER_SIZE          256         // 缓冲区大小
// #define MODBUS_MAX_REGISTERS        100         // 最大寄存器数量
// #define MODBUS_RESPONSE_TIMEOUT     1000        // 响应超时时间(ms)

// // Modbus 功能码定义
// #define MODBUS_FC_READ_COILS            0x01    // 读线圈状态
// #define MODBUS_FC_READ_DISCRETE_INPUT   0x02    // 读离散输入状态
// #define MODBUS_FC_READ_HOLDING_REGS     0x03    // 读保持寄存器
// #define MODBUS_FC_READ_INPUT_REGS       0x04    // 读输入寄存器
// #define MODBUS_FC_WRITE_SINGLE_COIL     0x05    // 写单个线圈
// #define MODBUS_FC_WRITE_SINGLE_REG      0x06    // 写单个寄存器
// #define MODBUS_FC_WRITE_MULTI_COILS     0x0F    // 写多个线圈
// #define MODBUS_FC_WRITE_MULTI_REGS      0x10    // 写多个寄存器

// // Modbus 异常码定义
// #define MODBUS_EXCEPTION_ILLEGAL_FUNCTION       0x01
// #define MODBUS_EXCEPTION_ILLEGAL_DATA_ADDRESS   0x02
// #define MODBUS_EXCEPTION_ILLEGAL_DATA_VALUE     0x03
// #define MODBUS_EXCEPTION_SLAVE_DEVICE_FAILURE   0x04

// // CRC16 多项式
// #define MODBUS_CRC16_POLY   0xA001

// // Modbus RTU 状态枚举
// typedef enum {
//     MODBUS_STATUS_OK = 0,
//     MODBUS_STATUS_ERROR,
//     MODBUS_STATUS_CRC_ERROR,
//     MODBUS_STATUS_TIMEOUT,
//     MODBUS_STATUS_INVALID_FUNCTION,
//     MODBUS_STATUS_INVALID_ADDRESS,
//     MODBUS_STATUS_INVALID_DATA
// } ModbusStatus_t;

// // Modbus RTU 请求帧结构体
// typedef struct {
//     uint8_t slave_addr;         // 从设备地址
//     uint8_t function_code;      // 功能码
//     uint16_t start_addr;        // 起始地址
//     uint16_t quantity;          // 数量
//     uint16_t crc;              // CRC校验
// } ModbusRequest_t;

// // Modbus RTU 寄存器类型
// typedef enum {
//     MODBUS_REG_COIL = 0,        // 线圈
//     MODBUS_REG_DISCRETE_INPUT,  // 离散输入
//     MODBUS_REG_HOLDING,         // 保持寄存器
//     MODBUS_REG_INPUT            // 输入寄存器
// } ModbusRegType_t;

// // Modbus RTU 句柄结构体
// typedef struct {
//     UART_4G_Handle_t *uart_handle;             // UART句柄
//     uint8_t slave_address;                      // 从设备地址
//     uint16_t holding_registers[MODBUS_MAX_REGISTERS];   // 保持寄存器
//     uint16_t input_registers[MODBUS_MAX_REGISTERS];     // 输入寄存器
//     uint8_t coils[MODBUS_MAX_REGISTERS/8];              // 线圈状态
//     uint8_t discrete_inputs[MODBUS_MAX_REGISTERS/8];    // 离散输入状态
//     uint8_t rx_buffer[MODBUS_BUFFER_SIZE];      // 接收缓冲区
//     uint8_t tx_buffer[MODBUS_BUFFER_SIZE];      // 发送缓冲区
//     uint16_t rx_count;                          // 接收字节计数
//     uint32_t last_char_time;                    // 最后字符接收时间
//     bool frame_ready;                           // 帧就绪标志
// } ModbusRTU_Handle_t;

// // 寄存器访问回调函数类型定义
// typedef ModbusStatus_t (*ModbusRegisterCallback_t)(uint16_t addr, uint16_t *value, bool is_write);

// // 函数声明

// /**
//  * @brief 初始化Modbus RTU从设备
//  * @param handle Modbus句柄指针
//  * @param uart_handle UART句柄指针
//  * @param slave_addr 从设备地址
//  * @return ModbusStatus_t 状态码
//  */
// ModbusStatus_t ModbusRTU_Init(ModbusRTU_Handle_t *handle, UART_4G_Handle_t *uart_handle, uint8_t slave_addr);

// /**
//  * @brief 反初始化Modbus RTU从设备
//  * @param handle Modbus句柄指针
//  * @return ModbusStatus_t 状态码
//  */
// ModbusStatus_t ModbusRTU_DeInit(ModbusRTU_Handle_t *handle);

// /**
//  * @brief 处理接收到的数据
//  * @param handle Modbus句柄指针
//  * @param data 接收数据
//  * @param length 数据长度
//  * @return ModbusStatus_t 状态码
//  */
// ModbusStatus_t ModbusRTU_ProcessReceivedData(ModbusRTU_Handle_t *handle, uint8_t *data, uint16_t length);

// /**
//  * @brief 处理单个接收字符
//  * @param handle Modbus句柄指针
//  * @param ch 接收字符
//  * @return ModbusStatus_t 状态码
//  */
// ModbusStatus_t ModbusRTU_ProcessReceivedChar(ModbusRTU_Handle_t *handle, uint8_t ch);

// /**
//  * @brief 主处理循环，检查并处理完整帧
//  * @param handle Modbus句柄指针
//  * @return ModbusStatus_t 状态码
//  */
// ModbusStatus_t ModbusRTU_Process(ModbusRTU_Handle_t *handle);

// /**
//  * @brief 设置保持寄存器值
//  * @param handle Modbus句柄指针
//  * @param addr 寄存器地址
//  * @param value 寄存器值
//  * @return ModbusStatus_t 状态码
//  */
// ModbusStatus_t ModbusRTU_SetHoldingRegister(ModbusRTU_Handle_t *handle, uint16_t addr, uint16_t value);

// /**
//  * @brief 获取保持寄存器值
//  * @param handle Modbus句柄指针
//  * @param addr 寄存器地址
//  * @param value 寄存器值指针
//  * @return ModbusStatus_t 状态码
//  */
// ModbusStatus_t ModbusRTU_GetHoldingRegister(ModbusRTU_Handle_t *handle, uint16_t addr, uint16_t *value);

// /**
//  * @brief 设置输入寄存器值
//  * @param handle Modbus句柄指针
//  * @param addr 寄存器地址
//  * @param value 寄存器值
//  * @return ModbusStatus_t 状态码
//  */
// ModbusStatus_t ModbusRTU_SetInputRegister(ModbusRTU_Handle_t *handle, uint16_t addr, uint16_t value);

// /**
//  * @brief 获取输入寄存器值
//  * @param handle Modbus句柄指针
//  * @param addr 寄存器地址
//  * @param value 寄存器值指针
//  * @return ModbusStatus_t 状态码
//  */
// ModbusStatus_t ModbusRTU_GetInputRegister(ModbusRTU_Handle_t *handle, uint16_t addr, uint16_t *value);

// /**
//  * @brief 设置线圈状态
//  * @param handle Modbus句柄指针
//  * @param addr 线圈地址
//  * @param value 线圈状态 (true/false)
//  * @return ModbusStatus_t 状态码
//  */
// ModbusStatus_t ModbusRTU_SetCoil(ModbusRTU_Handle_t *handle, uint16_t addr, bool value);

// /**
//  * @brief 获取线圈状态
//  * @param handle Modbus句柄指针
//  * @param addr 线圈地址
//  * @param value 线圈状态指针
//  * @return ModbusStatus_t 状态码
//  */
// ModbusStatus_t ModbusRTU_GetCoil(ModbusRTU_Handle_t *handle, uint16_t addr, bool *value);

// /**
//  * @brief 计算CRC16校验值
//  * @param data 数据缓冲区
//  * @param length 数据长度
//  * @return uint16_t CRC16值
//  */
// uint16_t ModbusRTU_CalculateCRC16(uint8_t *data, uint16_t length);

// /**
//  * @brief 验证CRC16校验值
//  * @param data 数据缓冲区（包含CRC）
//  * @param length 数据长度（包含CRC）
//  * @return bool true-校验正确，false-校验错误
//  */
// bool ModbusRTU_VerifyCRC16(uint8_t *data, uint16_t length);

// // 便利函数
// /**
//  * @brief 快速设置温度数据到寄存器0
//  * @param handle Modbus句柄指针
//  * @param temperature 温度值（扩大10倍，如25.5°C传入255）
//  * @return ModbusStatus_t 状态码
//  */
// ModbusStatus_t ModbusRTU_SetTemperature(ModbusRTU_Handle_t *handle, uint16_t temperature);

// /**
//  * @brief 获取温度数据从寄存器0
//  * @param handle Modbus句柄指针
//  * @param temperature 温度值指针
//  * @return ModbusStatus_t 状态码
//  */
// ModbusStatus_t ModbusRTU_GetTemperature(ModbusRTU_Handle_t *handle, uint16_t *temperature);

// // 全局默认Modbus句柄
// extern ModbusRTU_Handle_t g_modbus_handle;

// #endif /* MODBUS_RTU_H_ */ 